/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.ventasimple.web;

import com.ventasimple.dao.ClienteDAO;
import com.ventasimple.dao.ParametroDAO;
import com.ventasimple.dao.PublicacionDAO;
import com.ventasimple.dao.PublicidadDAO;
import com.ventasimple.dao.TipoPublicacionDAO;
import com.ventasimple.modelo.Cliente;
import com.ventasimple.modelo.Parametro;
import com.ventasimple.modelo.Publicacion;
import com.ventasimple.modelo.Publicidad;
import com.ventasimple.modelo.TipoPublicacion;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

/**
 *
 * @author Claudio
 */
@ManagedBean
@ApplicationScoped
public class AplicationBean  implements Serializable {
    
    private TipoPublicacionDAO tipoPublicacionDAO;
    private PublicidadDAO publicidadDAO;
    private PublicacionDAO publicacionDAO;
    private ParametroDAO parametroDAO;
    private ClienteDAO clienteDAO;
    
    private Parametro p;
    private List<TipoPublicacion> tiposPublicacion;  
    private List<Integer> anios;
    
    private List<Publicacion> destacadoAutos;
    private List<Publicacion> destacadoMotos;
    private List<Publicacion> destacadoNautica;
    private List<Publicacion> destacadoCamiones;
    private List<Publicacion> destacadoPlanesAhorro;
    
    
    private List<Cliente> concesionarias;        
    private List<Publicacion> ultimasPublicaciones;        
    private List<Publicacion> publicacionesVarias;
    private List<Publicidad> publicidad;

    /**
     * Creates a new instance of AplicationBean
     */
    public AplicationBean() {
        
    }
    
    @PostConstruct
    public void init(){
        
        tipoPublicacionDAO = new TipoPublicacionDAO();
        tiposPublicacion = tipoPublicacionDAO.getLista();
        anios = getListaAnios();
        
        publicidadDAO = new PublicidadDAO();
        publicacionDAO = new PublicacionDAO();
        parametroDAO = new ParametroDAO();
        clienteDAO = new ClienteDAO();
        
        p= parametroDAO.getParametros();
        
        publicidad = publicidadDAO.getPublicidadesActivas();
        concesionarias = clienteDAO.getLista(true);
        
        actualizarPublicacionesDestacadas();
    }
    
    public void actualizarPublicacionesDestacadas(){
        
        destacadoAutos = publicacionDAO.getPublicacionesByTipo(1);
        destacadoMotos = publicacionDAO.getPublicacionesByTipo(2);
        destacadoNautica = publicacionDAO.getPublicacionesByTipo(3);
        destacadoCamiones = publicacionDAO.getPublicacionesByTipo(4);
        destacadoPlanesAhorro = publicacionDAO.getPublicacionesByTipo(5);
        
    }
    
    public synchronized Integer getIdImagen(){
        try {
            p.setIdImagen(p.getIdImagen() + 1);
            parametroDAO.editar(p);
            return p.getIdImagen();
        } catch (Exception ex) {
            Logger.getLogger(AplicationBean.class.getName()).log(Level.SEVERE, "getIdImagen", ex);
            return 0;
        }        
    }
    
    
    public List<Integer> getListaAnios() {
        
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date()); 
        int anioActual = calendar.get(Calendar.YEAR);
        
        List<Integer> anios = new ArrayList<Integer>();
        
        for(int i=anioActual;i>(anioActual-100);i--){
            
            anios.add(i);
        }
        
        return anios;
    }
    
    public List<Publicacion> getUltimasPublicaciones() {
        return ultimasPublicaciones;
    }

    public void setUltimasPublicaciones(List<Publicacion> ultimasPublicaciones) {
        this.ultimasPublicaciones = ultimasPublicaciones;
    }

    public List<Publicacion> getPublicacionesVarias() {
        return publicacionesVarias;
    }

    public void setPublicacionesVarias(List<Publicacion> publicacionesVarias) {
        this.publicacionesVarias = publicacionesVarias;
    }
    
    public List<Publicidad> getPublicidad() {
        return publicidad;
    }

    public void setPublicidad(List<Publicidad> publicidad) {
        this.publicidad = publicidad;
    }

    public PublicidadDAO getPublicidadDAO() {
        return publicidadDAO;
    }

    public void setPublicidadDAO(PublicidadDAO publicidadDAO) {
        this.publicidadDAO = publicidadDAO;
    }

    public PublicacionDAO getPublicacionDAO() {
        return publicacionDAO;
    }

    public void setPublicacionDAO(PublicacionDAO publicacionDAO) {
        this.publicacionDAO = publicacionDAO;
    }

    public Parametro getP() {
        return p;
    }

    public void setP(Parametro p) {
        this.p = p;
    }

    void actualizarDatos() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
    public ParametroDAO getParametroDAO() {
        return parametroDAO;
    }

    public void setParametroDAO(ParametroDAO parametroDAO) {
        this.parametroDAO = parametroDAO;
    }

    public List<Publicacion> getDestacadoAutos() {
        return destacadoAutos;
    }

    public void setDestacadoAutos(List<Publicacion> destacadoAutos) {
        this.destacadoAutos = destacadoAutos;
    }

    public List<Publicacion> getDestacadoMotos() {
        return destacadoMotos;
    }

    public void setDestacadoMotos(List<Publicacion> destacadoMotos) {
        this.destacadoMotos = destacadoMotos;
    }

    public List<Publicacion> getDestacadoPlanesAhorro() {
        return destacadoPlanesAhorro;
    }

    public void setDestacadoPlanesAhorro(List<Publicacion> destacadoPlanesAhorro) {
        this.destacadoPlanesAhorro = destacadoPlanesAhorro;
    }

    public List<Publicacion> getDestacadoCamiones() {
        return destacadoCamiones;
    }

    public void setDestacadoCamiones(List<Publicacion> destacadoCamiones) {
        this.destacadoCamiones = destacadoCamiones;
    }

    public TipoPublicacionDAO getTipoPublicacionDAO() {
        return tipoPublicacionDAO;
    }

    public void setTipoPublicacionDAO(TipoPublicacionDAO tipoPublicacionDAO) {
        this.tipoPublicacionDAO = tipoPublicacionDAO;
    }

    public List<TipoPublicacion> getTiposPublicacion() {
        return tiposPublicacion;
    }

    public void setTiposPublicacion(List<TipoPublicacion> tiposPublicacion) {
        this.tiposPublicacion = tiposPublicacion;
    }

    public List<Publicacion> getDestacadoNautica() {
        return destacadoNautica;
    }

    public void setDestacadoNautica(List<Publicacion> destacadoNautica) {
        this.destacadoNautica = destacadoNautica;
    }

    public List<Cliente> getConcesionarias() {
        return concesionarias;
    }

    public void setConcesionarias(List<Cliente> concesionarias) {
        this.concesionarias = concesionarias;
    }

    public List<Integer> getAnios() {
        return anios;
    }

    public void setAnios(List<Integer> anios) {
        this.anios = anios;
    }
    
    
}
